'''
pytest 基础：
    安装： pip install pytest
    导入： import pytest
    生成报告： pip install pytest-html
    执行：
        模块名： test开头或者test结尾
        测试类： Test开头
        测试方法： test开头
        测试函数： test开头

    pytest 的优点：
        1.环境准备和环境销毁比较灵活，相比 unittest,多了模块级别
        2.可以灵活的挑选测试用例执行
        3.灵活的跳过用例执行的机制
        4.快速回归测试失败的测试用例（这个是 unittest 没有的）
        5.方便实现参数化（数据驱动）（这个是 unittest 没有的，必须结合 ddt 实现）
'''
import pytest


class Test1():
    @classmethod
    def setup_class(cls):
        print('--------测试类开始--------')

    @classmethod
    def teardown_class(cls):
        print('--------测试类结束--------')

    def setup_method(self):
        print('--------用例开始--------')

    def teardown_method(self):
        print('--------用例结束--------')

    def test1(self):
        print('1111111111')
        assert 1 == 2

    def test2(self):
        print('22222222222')
        assert 1 == 1


# @pytest.mark.skip('无条件跳过Test2')
# @pytest.mark.skipif(3 > 2, reason='条件满足，跳过Test2')
class Test2():
    def test3(self):
        print('333333')
        assert 1 == 1


@pytest.mark.runthis
def test4():
    print(r'222')
    assert 2 == 2


def setup_module():
    print('--------模块开始--------')


def teardown_module():
    print('--------模块结束--------')


if __name__ == '__main__':
    # # 执行方式1：
    # args = ['-vs']
    # pytest.main(args)

    # 执行方式2：命令行执行

    # # 生成报告：
    # args = ['-vs', '--html=reports.html', '--self-contained-html']
    # pytest.main(args)

    # # 指定目录：
    # args = ['..\day19_pytest_yaml_allure', '-vs']
    # pytest.main(args)

    # # 指定模块：
    # args = ['2_pytest_basic_test.py', '-vs']
    # pytest.main(args)

    # 指定测试类：
    args = ['2_pytest_basic_test.py::Test1', '-vs']
    pytest.main(args)

    # 指定测试方法：
    args = ['2_pytest_basic_test.py::Test1::test1', '-vs']
    pytest.main(args)

    # # -k 指定测试项：
    # args = ['2_pytest_basic_test.py', '-vk Test1', '-vs']
    # pytest.main(args)

    # # -k 指定测试项，支持逻辑运算：
    # args = ['2_pytest_basic_test.py', '-vk not Test1', '-vs']
    # pytest.main(args)

    # # -k 指定测试项，支持逻辑运算：
    # args = ['2_pytest_basic_test.py', '-vk Test1 or Test2', '-vs']
    # pytest.main(args)

    # # 根据标签执行
    # args = ['2_pytest_basic_test.py', '-m runthis', '-vs']
    # pytest.main(args)

    # # 显示跳过原因
    # args = ['2_pytest_basic_test.py', '-rvs']
    # pytest.main(args)

    # # --lf:重新运行上次运行失败的
    # args = ['2_pytest_basic_test.py', '-rvs', '--lf']
    # pytest.main(args)

    # --lf:优先运行上次运行失败的
    args = ['2_pytest_basic_test.py', '-rvs', '--ff']
    pytest.main(args)
